package com.skiving.cloud.admin.entity;

import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.time.LocalDateTime;

import java.io.Serial;
import java.util.List;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 组织机构表 实体类。
 *
 * @author skivingcloud
 * @since 2025-03-08
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("组织机构表")
@Table("sys_org")
public class SysOrg implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @Id
    @ApiModelProperty("主键")
    private String id;

    /**
     * 版本
     */
    @ApiModelProperty("版本")
    private Integer version;

    /**
     * 自定义编号
     */
    @ApiModelProperty("自定义编号")
    private String orgCode;

    /**
     * 机构名称
     */
    @ApiModelProperty("机构名称")
    private String orgName;

    /**
     * 简称
     */
    @ApiModelProperty("简称")
    private String shortName;

    /**
     * 租户
     */
    @ApiModelProperty("租户")
    private String tenantId;

    /**
     * 级别
     */
    @ApiModelProperty("级别")
    private Integer orgLevel;

    /**
     * 上级id，顶级时该值为0
     */
    @ApiModelProperty("上级id，顶级时该值为0")
    private String parentId;

    /**
     * 机构状态:1-正常 2-暂停
     */
    @ApiModelProperty("机构状态:1-正常 2-暂停")
    private String orgStatus;

    /**
     * 是否是叶子节点（0-叶子 1-父节点）
     */
    @ApiModelProperty("是否是叶子节点（0-叶子 1-父节点）")
    private String isParent;

    /**
     * 机构分类：1-虚拟机构、2-实体机构
     */
    @ApiModelProperty("机构分类：1-虚拟机构、2-实体机构")
    private String orgType;

    /**
     * 扩展级别，例如：1-公司、2-部门、9-其他
     */
    @ApiModelProperty("扩展级别，例如：1-公司、2-部门、9-其他")
    private String orgRank;

    /**
     * 排序
     */
    @ApiModelProperty("排序")
    private Integer orderNum;

    /**
     * 创建人
     */
    @ApiModelProperty("创建人")
    private String creater;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private LocalDateTime createTime;

    /**
     * 最后修改人
     */
    @ApiModelProperty("最后修改人")
    private String modUser;

    /**
     * 修改时间
     */
    @ApiModelProperty("修改时间")
    private LocalDateTime modTime;

    @Column(ignore = true)
    private List<SysOrg> children;

    @Column(ignore = true)
    private boolean disabled = false;
}
